japanmapライブラリで都道府県データを可視化してみる

japanmapライブラリで都道府県データを可視化してみる

Clock Icon2022.11.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

以前Google Colaboratory(以下Colab)でBigQueryのデータを扱うエントリを書きましたが、その中でデータをColabで可視化する際に都道府県別のデータを日本地図で表現するライブラリを使いました。そのライブラリの使い勝手が良かったので深堀りをしてみます。

japanmapとは

できるとこはとてもシンプルで都道府県別に日本地図を塗り分けるライブラリです。

使い方は「辞書型で色情報を渡す」のか「PandasのSeriesで色情報を渡す」の2パターンがあります。

辞書型で色情報を渡す

都道府県名:色情報で辞書を作成してjapanmapのライブラリに指定すれば良いだけです。 色情報は以下の型式で指定します。

  • カラー名 (例'東京都':'blue'
  • rgb(n,n,n)型式 東京都':(0,0,255)
  • #rrggbb型式 '東京都':'#0000ff'

PandasのSeriesで色情報を渡す

こちらの情報は都道府県の都道府県コード を使って色情報を渡す方法です。 Seriesのindexが都道府県コードと認識されて都道府県を塗り分ける事ができます。したがって予めデータを都道府県コードでソートした状態に加工しておくことが必要になります。なお色情報は先の辞書型の場合と同じ型式にします。

それでは早速使ってみたいと思います。

japanmapを使ってみる

はじめにjapanmapをインストールしますがこれはいつも通りpipでインストールできます。

pip install japanmap

今回可視化するデータは「SSDSE(教育用標準データセット) | 独立行政法人 統計センター 」からダウンロードできるデータでこの中のSSDSE-基本素材(SSDSE-E)SSDSE-E-2022v2.CSVを使います。更にこの中の県民所得を可視化してみたいと思います。

以下がソースコードになります。

import pandas as pd
from japanmap import picture
import matplotlib.pyplot as plt

#  CSVをPanasで読み込む
df = pd.read_csv('./SSDSE-E-2022v2.csv', encoding='shift_jis', header=2)

# カラーマップでmatplotlibのcmapのjetを設定
cmap = plt.get_cmap('jet')
# カラーマップの最小値と最大値を設定
norm = plt.Normalize(vmin=df['1人当たり県民所得(平成23年基準)'].min(), vmax=df['1人当たり県民所得(平成23年基準)'].max())
# カラーマップの凡例を表示
plt.colorbar(plt.cm.ScalarMappable(norm, cmap))
# データをSeries化する際に可視化対象のデータをカラーマップに従ってカラーコードに変換する関数を作成
fcol = lambda x: '#' + bytes(cmap(norm(x), bytes=True)[:3]).hex()
# japanmapライブラリとmatplotlibを使って可視化
plt.imshow(picture(df['1人当たり県民所得(平成23年基準)'].apply(fcol)))

このスクリプトを実行すると以下のような日本地図が出力されます。

このようにPandasで都道府県のデータを読み込みjapanmapライブラリを使うことで数行のコードで簡単に都道府県別に色を塗り分けた地図を作成できます。

まとめ

都道府県別のデータを使って日本地図を塗り分ける事が簡単にできるようになるjapanmapライブラリを使ってみました。実際に分析する現場ではBIツールを使ってこのような地図を作るかと思いますが、簡易的に都道府県別データを可視化したい際には数行のコードで可視化可能なので便利です。

またJupyterを使った分析環境でもjapanmapライブラリを活用できるので幅広い使い方ができるのではないでしょうか。

最後まで読んで頂いてありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.